package marcel;

/**
 * Speichert die Ausleihvorgänge temporär.
 * 
 * @author Marcel
 * @version 1.0
 * 
 * @see Lager
 */

import java.text.DecimalFormat;
import java.util.LinkedList;

import steffen.WSVException;

import marja.Handtuch;
import marja.KundenArchiv;
import marja.Schwimmflügel;
import marja.Surfbrett;

class Archiv
{
	/** LinkedList für alle Handtücher */
	LinkedList<Handtuch> handtuchArchiv = new LinkedList<Handtuch>();
	
	/** LinkedList für alle Schwimmflügel */
	LinkedList<Schwimmflügel> schwimmflügelArchiv = new LinkedList<Schwimmflügel>();
	
	/** LinkedList für alle Surfbretter */
	LinkedList<Surfbrett> surfbrettArchiv = new LinkedList<Surfbrett>();
	
	
	/** Private temporäre LinkedList für die Suche im Archiv. Speichert Handtücher.*/
	private LinkedList<Handtuch> handtuchTempList = new LinkedList<Handtuch>();
	
	/** Private temporäre LinkedList für die Suche im Archiv. Speichert Schwimmflügel.*/
	private LinkedList<Schwimmflügel> schwimmflügelTempList = new LinkedList<Schwimmflügel>();
	
	/** Private temporäre LinkedList für die Suche im Archiv. Speichert Surfbretter.*/
	private LinkedList<Surfbrett> surfbrettTempList = new LinkedList<Surfbrett>();
	
	/**
	 * Gibt den höchsten Kundenindex an, der vorhanden ist.
	 * Wird für die Ausgabe benötigt.
	 */
	private int höchsterKundenindex = 0;
	
	
	/** Formatangabe für den Preis */
	DecimalFormat df = new DecimalFormat (",##0.00");
	
	/** Erzeugt eine Instanz des Objekts Archiv. */
	private static Archiv archiv = new Archiv();
	
	/**
	 * Gibt die erzeugte Instanz des Objekts Archiv zurück.
	 * 
	 * @return Archiv
	 */
	static Archiv getInstance()
	{
	    return archiv;
	}
	
	/**
	 * Fügt das entsprechende Handtuch dem Archiv hinzu.
	 * 
	 * @param handtuch Vom Lager erstelltes Handtuch
	 */
	void fügeHandtuchHinzu(Handtuch handtuch)
	{
		handtuchArchiv.add(handtuch);
		if(handtuch.getKundenindex() > höchsterKundenindex)
			höchsterKundenindex = handtuch.getKundenindex();
	}
	
	/**
	 * Fügt den entsprechenden Schwimmflügel dem Archiv hinzu.
	 * 
	 * @param schwimmflügel Vom Lager erstellter Schwimmflügel
	 */
	void fügeSchwimmflügelHinzu(Schwimmflügel schwimmflügel)
	{
		schwimmflügelArchiv.add(schwimmflügel);
		if(schwimmflügel.getKundenindex() > höchsterKundenindex)
			höchsterKundenindex = schwimmflügel.getKundenindex();
	}
	
	/**
	 * Fügt ein entsprechendes Surfbrett dem Archiv hinzu.
	 * 
	 * @param surfbrett Vom Lager erstelltes Surfbrett
	 */
	void fügeSurfbrettHinzu(Surfbrett surfbrett)
	{
		surfbrettArchiv.add(surfbrett);
		if(surfbrett.getKundenindex() > höchsterKundenindex)
			höchsterKundenindex = surfbrett.getKundenindex();
	}
	
	
	/**
	 * Sucht mit findeHandtücherImArchiv die entsprechenden Handtücher im Archiv.
	 * Kalkuliert Kosten und setzt Datum der Rückgabe mit Hilfe des Gegenstandes.
	 * 
	 * @param kundenindex Statische Kundennummer
	 * @param datumBis Datum der Rückgabe
	 * @throws WSVException 
	 */
	LinkedList<Handtuch> gebeHandtuchZurück(int kundenindex, String datumBis) throws WSVException
	{
		handtuchTempList.clear();
		this.findeHandtuchImArchiv(kundenindex, datumBis);
		for (int i = 0; i < handtuchTempList.size(); i++)
		{
			handtuchTempList.get(i).zurückgeben(datumBis);
		}
		return handtuchTempList;
	}
	
	/**
	 * Sucht das Handtuch mit Hilfe der Parameter im Archiv.
	 * Setzt istBezahlt im Handtuch.
	 * 
	 * @param kundenindex Statische Kundennummer
	 * @param datumAbrechnen Datum, bis wohin bezahlt werden soll
	 * @throws WSVException 
	 */
	void rechneHandtuchAb(int kundenindex, String datumAbrechnen)
	{
		handtuchTempList.clear();
		for (int i = 0; i < handtuchArchiv.size(); i++)
		{
			Handtuch handtuchTemp = handtuchArchiv.get(i);
			if (handtuchTemp.getKundenindex() == kundenindex
					&& handtuchTemp.getDatumBis() != null
					&& !(handtuchTemp.getIstBezahlt())
					&& handtuchTemp.späterDatumBis(datumAbrechnen))
			{
				handtuchTempList.add(handtuchTemp);
			}
		}
		if (!handtuchTempList.isEmpty())
		{
			for (int i = 0; i < handtuchTempList.size(); i++)
			{
				handtuchTempList.get(i).abrechnen();
			}	
			
			System.out.println("Bezahlung der abgeschlossenen Ausleihvorgängen des Typs Handtuch des Kunden " 
					+ KundenArchiv.getInstance().bekommeVorname(kundenindex)
					+ " " + KundenArchiv.getInstance().bekommeNachname(kundenindex)
					+ " (KdNr. " + KundenArchiv.getInstance().bekommeKundennummer(kundenindex)
					+ ") war erfolgreich.");
		}
		else
		{
			System.out.println("Keine Handtücher mit gesuchten Kriterien gefunden.");
		}
		handtuchTempList.clear();
		
	}
	
	/**
	 * Sucht offene Handtücher anhand der Parameter im Archiv.
	 * Fügt diese in LinkedList handtuchTempList ein.
	 * 
	 * @param kundenindex Statische Kundennummer
	 * @param datumBis Datum der Rückgabe
	 * @return LinkedList mit gefunden Handtüchern
	 * @throws WSVException 
	 * @see gebeHandtuchZurück
	 */
	private LinkedList<Handtuch> findeHandtuchImArchiv(int kundenindex, String datumBis) throws WSVException
	{
		for (int i = 0; i < handtuchArchiv.size(); i++)
		{
			Handtuch handtuchTemp = handtuchArchiv.get(i);
			if (handtuchTemp.getDatumBis() == null 
					&& handtuchTemp.getKundenindex() == kundenindex
					&& !(handtuchTemp.getIstBezahlt())
					&& handtuchTemp.zulässigesDatumBis(datumBis))
			{
				handtuchTempList.add(handtuchTemp);
			}
		}
		
		if (handtuchTempList.size() > 0)
			return handtuchTempList;
		else
			throw new WSVException("Rückgabe fehlgeschlagen! Kein Objekt mit gesuchten Kriterien gefunden.", 32);
	}
	
	
	/**
	 * Sucht mit findeSchwimmflügelImArchiv die entsprechenden Schwimmflügel im Archiv.
	 * Berechnet die Anzahl aller Schwimmflügel des Kunden bis zum Datum der Rückgabe.
	 * 
	 * @param kundenindex Statische Kundennummer
	 * @param datumBis Datum der Rückgabe
	 * @return Integer Count Anzahl der offenen Schwimmflügel des Kunden bis zum Rückgabedatum
	 * @throws WSVException 
	 */
	int getCountVonSchwimmflügel(int kundenindex, String datumBis) throws WSVException
	{
		int count = 0;
		this.findeSchwimmflügelImArchiv(kundenindex, datumBis);
		for (int i = 0; i < schwimmflügelTempList.size(); i++)
		{
			count = count + schwimmflügelTempList.get(i).getCount();
		}
		schwimmflügelTempList.clear();
		return count;
	}
	
	/**
	 * Sucht mit findeSchwimmflügelImArchiv die entsprechenden Schwimmflügel im Archiv.
	 * Kalkuliert Kosten und setzt Datum der Rückgabe mit Hilfe des Gegenstandes.
	 * 
	 * @param kundenindex Statische Kundennummer
	 * @param datumBis Datum der Rückgabe
	 * @throws WSVException 
	 */
	void gebeSchwimmflügelZurück(int kundenindex, String datumBis) throws WSVException
	{
		this.findeSchwimmflügelImArchiv(kundenindex, datumBis);
		for (int i = 0; i < schwimmflügelTempList.size(); i++)
		{
			schwimmflügelTempList.get(i).zurückgeben(datumBis);
		}
		schwimmflügelTempList.clear();
	}
	
	/**
	 * Sucht das Schwimmflügel mit Hilfe der Parameter im Archiv.
	 * Setzt istBezahlt im Schwimmflügel.
	 * 
	 * @param kundenindex Statische Kundennummer
	 * @param datumAbrechnen Datum, bis wohin bezahlt werden soll
	 * @throws WSVException 
	 */
	void rechneSchwimmflügelAb(int kundenindex, String datumAbrechnen)
	{
		for (int i = 0; i < schwimmflügelArchiv.size(); i++)
		{
			Schwimmflügel schwimmflügelTemp = schwimmflügelArchiv.get(i);
			if (schwimmflügelTemp.getKundenindex() == kundenindex
					&& schwimmflügelTemp.getDatumBis() != null
					&& !(schwimmflügelTemp.getIstBezahlt())
					&& schwimmflügelTemp.späterDatumBis(datumAbrechnen))
			{
				schwimmflügelTempList.add(schwimmflügelTemp);
			}
		}
		if(!schwimmflügelTempList.isEmpty())
		{
			for (int i = 0; i < schwimmflügelTempList.size(); i++)
			{
				schwimmflügelTempList.get(i).abrechnen();
			}
			System.out.println("Bezahlung der abgeschlossenen Ausleihvorgängen des Typs Schwimmflügel des Kunden " 
					+ KundenArchiv.getInstance().bekommeVorname(kundenindex)
					+ " " + KundenArchiv.getInstance().bekommeNachname(kundenindex)
					+ " (KdNr. " + KundenArchiv.getInstance().bekommeKundennummer(kundenindex)
					+ ") war erfolgreich.");
		}
		else
		{
			System.out.println("Kein Schwimmflügel mit gesuchten Kriterien gefunden.");
		}
		schwimmflügelTempList.clear();
	}
	
	/**
	 * Sucht offene Schwimmflügel anhand der Parameter im Archiv.
	 * Fügt diese in LinkedList schwimmflügelTempList ein.
	 * 
	 * @param kundenindex Statische Kundennummer
	 * @param datumBis Datum der Rückgabe
	 * @return LinkedList mit gefunden Schwimmflügel
	 * @throws WSVException 
	 * @see getCountVonSchwimmflügel
	 * @see gebeSchwimmflügelZurück
	 */
	private LinkedList<Schwimmflügel> findeSchwimmflügelImArchiv(int kundenindex, String datumBis) throws WSVException
	{
		for (int i = 0; i < schwimmflügelArchiv.size(); i++)
		{
			Schwimmflügel schwimmflügelTemp = schwimmflügelArchiv.get(i);
			if (schwimmflügelTemp.getDatumBis() == null 
					&& schwimmflügelTemp.getKundenindex() == kundenindex
					&& schwimmflügelTemp.zulässigesDatumBis(datumBis))
			{
				schwimmflügelTempList.add(schwimmflügelTemp);
			}
		}
		if (schwimmflügelTempList.size() > 0)
			return schwimmflügelTempList;
		else
			throw new WSVException("Rückgabe fehlgeschlagen! Kein Objekt mit gesuchten Kriterien gefunden.", 32);
	}
	
	/**
	 * Sucht mit findeSurfbrettImArchiv die entsprechenden Surfbretter im Archiv.
	 * Berechnet die Anzahl aller Surfbretter des Kunden bis zum Datum der Rückgabe.
	 * 
	 * @param kundenindex Statische Kundennummer
	 * @param datumBis Datum der Rückgabe
	 * @return Integer Count Anzahl der offenen Surfbretter des Kunden bis zum Rückgabedatum
	 * @throws WSVException 
	 */
	int getCountVonSurfbrett(int kundenindex, String datumBis) throws WSVException
	{
		int count = 0;
		this.findeSurfbrettImArchiv(kundenindex, datumBis);
		for (int i = 0; i < surfbrettTempList.size(); i++)
		{
			count = count + surfbrettTempList.get(i).getCount();
		}
		surfbrettTempList.clear();
		return count;
	}
	
	/**
	 * Sucht mit findeSurfbrettImArchiv die entsprechenden Surfbretter im Archiv.
	 * Kalkuliert Kosten und setzt Datum der Rückgabe mit Hilfe des Gegenstandes.
	 * 
	 * @param kundenindex Statische Kundennummer
	 * @param datumBis Datum der Rückgabe
	 * @throws WSVException 
	 */
	void gebeSurfbrettZurück(int kundenindex, String datumBis) throws WSVException
	{
		this.findeSurfbrettImArchiv(kundenindex, datumBis);
		for (int i = 0; i < surfbrettTempList.size(); i++)
		{
			surfbrettTempList.get(i).zurückgeben(datumBis);
		}
		surfbrettTempList.clear();
	}
	
	/**
	 * Sucht das Surfbrett mit Hilfe der Parameter im Archiv.
	 * Setzt istBezahlt im Surfbrett.
	 * 
	 * @param kundenindex Statische Kundennummer
	 * @param datumAbrechnen Datum, bis wohin bezahlt werden soll
	 * @throws WSVException 
	 */
	void rechneSurfbrettAb(int kundenindex, String datumAbrechnen)
	{
		for (int i = 0; i < surfbrettArchiv.size(); i++)
		{
			Surfbrett surfbrettTemp = surfbrettArchiv.get(i);
			if (surfbrettTemp.getKundenindex() == kundenindex
					&& surfbrettTemp.getDatumBis() != null
					&& !(surfbrettTemp.getIstBezahlt())
					&& surfbrettTemp.späterDatumBis(datumAbrechnen))
			{
				surfbrettTempList.add(surfbrettTemp);
			}
		}
		if (!surfbrettTempList.isEmpty())
		{
			for (int i = 0; i < surfbrettTempList.size(); i++)
			{
			surfbrettTempList.get(i).abrechnen();
			}			
			System.out.println("Bezahlung der abgeschlossenen Ausleihvorgängen des Typs Surfbrett des Kunden " 
					+ KundenArchiv.getInstance().bekommeVorname(kundenindex)
					+ " " + KundenArchiv.getInstance().bekommeNachname(kundenindex)
					+ " (KdNr. " + KundenArchiv.getInstance().bekommeKundennummer(kundenindex)
					+ ") war erfolgreich.");
		}
		else
		{
			System.out.println("Keine Surfbretter mit gesuchten Kriterien gefunden.");
		}
		
		surfbrettTempList.clear();
	}
	
	/**
	 * Sucht offene Surfbretter anhand der Parameter im Archiv.
	 * Fügt diese in LinkedList surfbrettTempList ein.
	 * 
	 * @param kundenindex Statische Kundennummer
	 * @param datumBis Datum der Rückgabe
	 * @return LinkedList mit gefunden Surfbrettern
	 * @throws WSVException 
	 * @see getCountVonSurfbrett
	 * @see gebeSurfbrettZurück
	 */
	private LinkedList<Surfbrett> findeSurfbrettImArchiv(int kundenindex, String datumBis) throws WSVException
	{
		for (int i = 0; i < surfbrettArchiv.size(); i++)
		{
			Surfbrett surfbrettTemp = surfbrettArchiv.get(i);
			if (surfbrettTemp.getDatumBis() == null 
					&& surfbrettTemp.getKundenindex() == kundenindex
					&& !(surfbrettTemp.getIstBezahlt())
					&& surfbrettTemp.zulässigesDatumBis(datumBis))
			{
				surfbrettTempList.add(surfbrettTemp);
			}
		}
		
		if (surfbrettTempList.size() > 0)
			return surfbrettTempList;
		else
			throw new WSVException("Rückgabe fehlgeschlagen! Kein Objekt mit gesuchten Kriterien gefunden.", 32);
	}
	
	/** Auflistung der ausgeliehen Objekte, gruppiert nach Kunden. */
	void gebeArchivAus()
	{
		boolean gefunden = false;
		for (int ki = 0; ki <= höchsterKundenindex; ki++)
		{
			boolean header = true;
			boolean headerKunde = true;
			boolean gefundenFürKunde = false;		
			
			for (int i = 0; i < handtuchArchiv.size(); i++)
			{
				Handtuch handtuch = handtuchArchiv.get(i);
				if (handtuch.getKundenindex() == ki
						&& handtuch.getDatumBis() == null)
				{
					if (headerKunde)
					{
						System.out.println("---------  Ausleihvorgänge von " 
								+ KundenArchiv.getInstance().bekommeVorname(ki) + " "
								+ KundenArchiv.getInstance().bekommeNachname(ki) + " (Kundennummer: "
								+ KundenArchiv.getInstance().bekommeKundennummer(ki) + ") "
								+ "---------");
						headerKunde = false;
					}
					header = this.HandtuchArchivAusgabe(header, handtuch, ki);
					gefunden = true;
					gefundenFürKunde = true;
				}
			}
			
			header = true;
			
			
			for (int i = 0; i < schwimmflügelArchiv.size(); i++)
			{
				Schwimmflügel schwimmflügel = schwimmflügelArchiv.get(i);
				if (schwimmflügel.getKundenindex() == ki
						&& schwimmflügel.getDatumBis() == null)
				{
					if (headerKunde)
					{
						System.out.println("---------  Ausleihvorgänge von " 
								+ KundenArchiv.getInstance().bekommeVorname(ki) + " "
								+ KundenArchiv.getInstance().bekommeNachname(ki) + " (Kundennummer: "
								+ KundenArchiv.getInstance().bekommeKundennummer(ki) + ") "
								+ "---------");
						headerKunde = false;
					}
					header = this.SchwimmflügelArchivAusgabe(header, schwimmflügel, ki);
					gefunden = true;
					gefundenFürKunde = true;
				}
			}
			
			header = true;
			
			for (int i = 0; i < surfbrettArchiv.size(); i++)
			{
				Surfbrett surfbrett = surfbrettArchiv.get(i);
	
				if (surfbrett.getKundenindex() == ki
						&& surfbrett.getDatumBis() == null)
				{
					if (headerKunde)
					{
						System.out.println("---------  Ausleihvorgänge von " 
								+ KundenArchiv.getInstance().bekommeVorname(ki) + " "
								+ KundenArchiv.getInstance().bekommeNachname(ki) + " (Kundennummer: "
								+ KundenArchiv.getInstance().bekommeKundennummer(ki) + ") "
								+ "---------");
						headerKunde = false;
					}
					header = this.SurfbrettArchivAusgabe(header, surfbrett, ki);
					gefunden = true;
					gefundenFürKunde = true;
				}
			}
			if (gefundenFürKunde)
			{
				System.out.println();
				System.out.println();
			}
			header = true;
		}
		if (gefunden == false)
			System.out.println("Keine ausgeliehenen Objekte gefunden.");
	}
	
	/**
	 * Auflistung der mit einem Kunden durchgeführten Ausleihvorgänge
	 * (offene und abgeschlossene oder nur offene).
	 * 
	 * @param kundenindex Statische Kundennummer
	 * @param AlleAusleihvorgänge Offene und Abgeschlossene bei true und offene bei false.
	 */
	void gebeArchivAus(int kundenindex, boolean AlleAusleihvorgänge)
	{
		boolean header = true;
		boolean kundeGefunden = false;
		
		System.out.println("---------  Ausleihvorgänge von " 
							+ KundenArchiv.getInstance().bekommeVorname(kundenindex) + " "
							+ KundenArchiv.getInstance().bekommeNachname(kundenindex) + " (Kundennummer: "
							+ KundenArchiv.getInstance().bekommeKundennummer(kundenindex) + ") "
							+ "---------");
		
		for (int i = 0; i < handtuchArchiv.size(); i++)
		{
			Handtuch handtuch = handtuchArchiv.get(i);
			if (AlleAusleihvorgänge)
			{
				if (handtuch.getKundenindex() == kundenindex)
				{
					header = this.HandtuchArchivAusgabe(header, handtuch, kundenindex);
					kundeGefunden = true;
				}
			}
			else
			{
				if (handtuch.getKundenindex() == kundenindex
						&& handtuch.getDatumBis() == null)
				{
					header = this.HandtuchArchivAusgabe(header, handtuch, kundenindex);
					kundeGefunden = true;
				}
			}
			
		}
		
		header = true;
		
		
		for (int i = 0; i < schwimmflügelArchiv.size(); i++)
		{
			Schwimmflügel schwimmflügel = schwimmflügelArchiv.get(i);
			if (AlleAusleihvorgänge)
			{
				if (schwimmflügel.getKundenindex() == kundenindex)
				{
					header = this.SchwimmflügelArchivAusgabe(header, schwimmflügel, kundenindex);
					kundeGefunden = true;
				}
			}
			else
			{
				if (schwimmflügel.getKundenindex() == kundenindex
						&& schwimmflügel.getDatumBis() == null)
				{
					header = this.SchwimmflügelArchivAusgabe(header, schwimmflügel, kundenindex);
					kundeGefunden = true;
				}
			}
		}
		
		header = true;
		
		for (int i = 0; i < surfbrettArchiv.size(); i++)
		{
			Surfbrett surfbrett = surfbrettArchiv.get(i);
			if (AlleAusleihvorgänge)
			{
				if (surfbrett.getKundenindex() == kundenindex)
				{
					header = this.SurfbrettArchivAusgabe(header, surfbrett, kundenindex);
					kundeGefunden = true;
				}
			}
			else
			{
				if (surfbrett.getKundenindex() == kundenindex
						&& surfbrett.getDatumBis() == null)
				{
					header = this.SurfbrettArchivAusgabe(header, surfbrett, kundenindex);
					kundeGefunden = true;
				}
			}
			
		}
		
		if (kundeGefunden == false)
		{
			System.out.println("Keine ausgeliehenen Objekte des Kunden gefunden.");
		}
	}
	
	/** Auflistung der ausgeliehen Objekte nach Typ, gruppiert nach Kunden. */
	void gebeLeihstatusAus(String Typ)
	{		
		for (int ki = 0; ki <= höchsterKundenindex; ki++)
		{
			boolean gefundenFürKunde = false;

			boolean header = true;
			boolean headerKunde = true;
			
			switch (Typ) {
			case "Schwimmflügel":
				for (int i = 0; i < schwimmflügelArchiv.size(); i++)
				{
					Schwimmflügel schwimmflügel = schwimmflügelArchiv.get(i);
					if (schwimmflügel.getKundenindex() == ki
							&& schwimmflügel.getDatumBis() == null)
					{
						if (headerKunde)
						{
							System.out.println("---------  Ausleihvorgänge von " 
									+ KundenArchiv.getInstance().bekommeVorname(ki) + " "
									+ KundenArchiv.getInstance().bekommeNachname(ki) + " (Kundennummer: "
									+ KundenArchiv.getInstance().bekommeKundennummer(ki) + ") "
									+ "---------");
							headerKunde = false;
						}
						header = this.SchwimmflügelArchivAusgabe(header, schwimmflügel, ki);
						gefundenFürKunde = true;
					}
				}
				break;
				
			case "Handtuch":
				for (int i = 0; i < handtuchArchiv.size(); i++)
				{
					Handtuch handtuch = handtuchArchiv.get(i);
					if (handtuch.getKundenindex() == ki
							&& handtuch.getDatumBis() == null)
					{
						if (headerKunde)
						{
							System.out.println("---------  Ausleihvorgänge von " 
									+ KundenArchiv.getInstance().bekommeVorname(ki) + " "
									+ KundenArchiv.getInstance().bekommeNachname(ki) + " (Kundennummer: "
									+ KundenArchiv.getInstance().bekommeKundennummer(ki) + ") "
									+ "---------");
							headerKunde = false;
						}
						header = this.HandtuchArchivAusgabe(header, handtuch, ki);
						gefundenFürKunde = true;
					}
				}
				break;
			case "Surfbrett":
				for (int i = 0; i < surfbrettArchiv.size(); i++)
				{
					Surfbrett surfbrett = surfbrettArchiv.get(i);
		
					if (surfbrett.getKundenindex() == ki
							&& surfbrett.getDatumBis() == null)
					{
						if (headerKunde)
						{
							System.out.println("---------  Ausleihvorgänge von " 
									+ KundenArchiv.getInstance().bekommeVorname(ki) + " "
									+ KundenArchiv.getInstance().bekommeNachname(ki) + " (Kundennummer: "
									+ KundenArchiv.getInstance().bekommeKundennummer(ki) + ") "
									+ "---------");
							headerKunde = false;
						}
						header = this.SurfbrettArchivAusgabe(header, surfbrett, ki);
						gefundenFürKunde = true;
					}
				}
				break;
	
			default:
				break;
			}
			
			if (gefundenFürKunde)
			{
				System.out.println();
				System.out.println();	
			}
		}		
	}
	
	/**
	 * Gibt die Daten des Gegenstandes auf die Konsole aus.
	 * 
	 * @param header boolean zur Vermeidung von Kopfzeilendopplungen
	 * @param handtuch Auszugebener Gegenstand
	 * @return header boolean für weitere Nutzung
	 * @see gebeArchivAus
	 */
	private boolean HandtuchArchivAusgabe(boolean header, Handtuch handtuch, int kundenindex)
	{
		if (header)
		{
			System.out.println();
			System.out.println("	~~~~~~~~~  Handtuch Archiv  ~~~~~~~~~");
			System.out.println("Anzahl"
					+ "	|  " + "Datum Verleih"
					+ "	|  " + "Datum Rückgabe"
					+ "	|  " + "Endpreis"
					+ "	|  " + "Bezahlt?");
			System.out.println("------------------------------------------------------------------------------------------");
			header = false;
		}
		
		System.out.print(handtuch.getCount()
				+ "	|  " + handtuch.getDatumVonString());
		
		if (handtuch.getDatumBis() == null)
			System.out.print("	|	verliehen");
		else
			System.out.print("	|  " + handtuch.getDatumBisString());
		
		System.out.println("	|   " + df.format(handtuch.getEndpreis()) + " €"
				+ "	|  " + handtuch.getIstBezahltString());
		return header;
	}	
	
	/**
	 * Gibt die Daten des Gegenstandes auf die Konsole aus.
	 * 
	 * @param header boolean zur Vermeidung von Kopfzeilendopplungen
	 * @param handtuch Auszugebener Gegenstand
	 * @return header boolean für weitere Nutzung
	 * @see gebeArchivAus
	 */
	private boolean SchwimmflügelArchivAusgabe(boolean header, Schwimmflügel schwimmflügel, int kundenindex)
	{
		if (header)
		{
			System.out.println();
			System.out.println("	~~~~~~~~~  Schwimmflügel Archiv  ~~~~~~~~~");
			System.out.println("Anzahl"
					+ "	|  " + "Datum Verleih"
					+ "	|  " + "Datum Rückgabe"
					+ "	|  " + "Endpreis"
					+ "	|  " + "Bezahlt?");
			System.out.println("------------------------------------------------------------------------------------------");
			header = false;
		}
		System.out.print(schwimmflügel.getCount()
				+ "	|  " + schwimmflügel.getDatumVonString());
		
		if (schwimmflügel.getDatumBis() == null)
			System.out.print("	|	verliehen");
		else
			System.out.print("	|  " + schwimmflügel.getDatumBisString());
		
		System.out.println("	|   " + df.format(schwimmflügel.getEndpreis()) + " €"
				+ "	|  " + schwimmflügel.getIstBezahltString());
		return header;
	}
	
	/**
	 * Gibt die Daten des Gegenstandes auf die Konsole aus.
	 * 
	 * @param header boolean zur Vermeidung von Kopfzeilendopplungen
	 * @param handtuch Auszugebener Gegenstand
	 * @return header boolean für weitere Nutzung
	 * @see gebeArchivAus
	 */
	private boolean SurfbrettArchivAusgabe(boolean header, Surfbrett surfbrett, int kundenindex)
	{
		if (header)
		{
			System.out.println();
			System.out.println("	~~~~~~~~~  Surfbrett Archiv  ~~~~~~~~~");
			System.out.println("Anzahl"
					+ "	|  " + "Datum Verleih"
					+ "	|  " + "Datum Rückgabe"
					+ "	|  " + "Endpreis"
					+ "	|  " + "Bezahlt?");
			System.out.println("------------------------------------------------------------------------------------------");
			header = false;
		}		
		
		System.out.print(surfbrett.getCount()
				+ "	|  " + surfbrett.getDatumVonString());
		
		if (surfbrett.getDatumBis() == null)
			System.out.print("	|	verliehen");
		else
			System.out.print("	|  " + surfbrett.getDatumBisString());
		
		System.out.println("	|   " + df.format(surfbrett.getEndpreis()) + " €"
				+ "	|  " + surfbrett.getIstBezahltString());
		return header;
	}
}
